"""
@Author : 合肥一元数智教育科技有限公司
@Date :  2025/3/17 9:50
@Description :   多个任务同时执行
1. 多进程
2. 多线程
两者本质含义一样, 通过多进程方式也是增加线程的个数实现任务的并发执行
"""
import time
import multiprocessing
import os


# 任务1
def sing():
    print(f'sing任务运行在进程:{os.getpid()},父进程号:{os.getppid()}')
    for i in range(3):
        print('正在唱歌...')
        time.sleep(1)


# 任务2
def dance():
    print(f'dance任务运行在进程:{os.getpid()},父进程号:{os.getppid()}')
    for i in range(3):
        print('正在跳舞...')
        time.sleep(1)


"""
目前两个任务全部执行在主线程上  先后顺序  主进程
可以自定义两个进程，将唱歌和跳舞的任务交给自定义的进程执行
自定义进程步骤：
  1. 导入模块  import  multiprocessing
  2. 创建进程对象
  3. 开启进程
"""
# sing()
# dance()

if __name__ == '__main__':
    # 创建进程对象  target 进程需要执行的任务  子进程   运行在主进程
    sing_process = multiprocessing.Process(target=sing)
    dance_process = multiprocessing.Process(target=dance)
    """
      开启进程前，将进程设置为守护主进程
    """
    sing_process.daemon = True
    dance_process.daemon = True

    # 开启进程  start()
    sing_process.start()
    dance_process.start()
    """
      默认情况下主进程会等待所有的子进程经任务执行完毕后，才会结束进程
      如何实现主进程结束后  子进程全部销毁
      通过设置守护主进程 可以实现以上效果
    """
    time.sleep(1)
    # 获取进程编号
    print(f'主程序中的进程号:{os.getpid()}')

